/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Profesionales;

import GUI.TaskPane.TaskPaneGroupFinanzas;
import SubsistemaFinanzas.Convenios;
import SubsistemaFinanzas.formularioConvenio;
import clienteSandraParada.Login;
import clienteSandraParada.Mensajeria;
import java.awt.Color;
import javax.swing.JLabel;

import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 * Clase que tiene como objetivo mostrar los profesionales externos agregados en la base de datos,
 * en donde se pueden realizar algunas acciones.
 *
 * @author Franzel
 */
public class ProfesionalExterno extends javax.swing.JPanel {

    DialogoInfoProfesionalExterno formulario = new DialogoInfoProfesionalExterno(null, true, this);

    public ProfesionalExterno() {
        initComponents();
        this.actualizarTabla((java.util.List<service.ProfesionalExterno>) listarProfesionalesExternos());

    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        dialogoEliminarProfExterno = new javax.swing.JDialog();
        jPanel8 = new javax.swing.JPanel();
        etiquetaEliminar = new javax.swing.JLabel();
        jLabel18 = new javax.swing.JLabel();
        botonSiEliminar = new javax.swing.JButton();
        botonNoEliminar = new javax.swing.JButton();
        jPanel5 = new javax.swing.JPanel();
        jLabel4 = new javax.swing.JLabel();
        jScrollPane4 = new javax.swing.JScrollPane();
        contenedorProfesionalesExternos = new javax.swing.JTable();
        datosABuscar = new javax.swing.JTextField();
        jPanel6 = new javax.swing.JPanel();
        etiquetaMensajeria = new javax.swing.JLabel();
        jPanel7 = new javax.swing.JPanel();
        botonAgregar = new javax.swing.JButton();
        botonModificar = new javax.swing.JButton();
        botonEliminar = new javax.swing.JButton();
        botonVer = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();

        dialogoEliminarProfExterno.setTitle("Eliminar paciente");
        dialogoEliminarProfExterno.setMinimumSize(new java.awt.Dimension(420, 180));
        dialogoEliminarProfExterno.setModal(true);
        dialogoEliminarProfExterno.setResizable(false);

        etiquetaEliminar.setText("¿Confirma que desea enviar a la papelera los profesionales seleccionados?");

        jLabel18.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos35X35/Papelera.png"))); // NOI18N

        javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
        jPanel8.setLayout(jPanel8Layout);
        jPanel8Layout.setHorizontalGroup(
            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel8Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel18)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(etiquetaEliminar)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel8Layout.setVerticalGroup(
            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel8Layout.createSequentialGroup()
                .addGap(40, 40, 40)
                .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel18)
                    .addGroup(jPanel8Layout.createSequentialGroup()
                        .addGap(9, 9, 9)
                        .addComponent(etiquetaEliminar)))
                .addContainerGap(24, Short.MAX_VALUE))
        );

        botonSiEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/Aceptar.png"))); // NOI18N
        botonSiEliminar.setText("Si");
        botonSiEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonSiEliminarActionPerformed(evt);
            }
        });

        botonNoEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/Cancelar.png"))); // NOI18N
        botonNoEliminar.setText("No");
        botonNoEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonNoEliminarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout dialogoEliminarProfExternoLayout = new javax.swing.GroupLayout(dialogoEliminarProfExterno.getContentPane());
        dialogoEliminarProfExterno.getContentPane().setLayout(dialogoEliminarProfExternoLayout);
        dialogoEliminarProfExternoLayout.setHorizontalGroup(
            dialogoEliminarProfExternoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, dialogoEliminarProfExternoLayout.createSequentialGroup()
                .addContainerGap(245, Short.MAX_VALUE)
                .addComponent(botonSiEliminar, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(botonNoEliminar, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        dialogoEliminarProfExternoLayout.setVerticalGroup(
            dialogoEliminarProfExternoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(dialogoEliminarProfExternoLayout.createSequentialGroup()
                .addComponent(jPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(dialogoEliminarProfExternoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonSiEliminar)
                    .addComponent(botonNoEliminar))
                .addGap(0, 15, Short.MAX_VALUE))
        );

        setPreferredSize(new java.awt.Dimension(953, 603));

        jPanel5.setBackground(new java.awt.Color(255, 255, 255));
        jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1), "Profesionales Externos", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.TOP, new java.awt.Font("Tahoma", 0, 36))); // NOI18N

        jLabel4.setText("Buscar ");

        contenedorProfesionalesExternos.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Rut", "Nombres", "Apellido paterno", "Especialidad", "Institución proveniente"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Integer.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        contenedorProfesionalesExternos.getTableHeader().setReorderingAllowed(false);
        contenedorProfesionalesExternos.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                mouseClickedContenedorUsuarios(evt);
            }
        });
        jScrollPane4.setViewportView(contenedorProfesionalesExternos);

        datosABuscar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                datosABuscarKeyReleased(evt);
            }
        });

        javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
        jPanel5.setLayout(jPanel5Layout);
        jPanel5Layout.setHorizontalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup()
                .addGap(728, 728, 728)
                .addComponent(jLabel4)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(datosABuscar, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addComponent(jScrollPane4)
        );
        jPanel5Layout.setVerticalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel5Layout.createSequentialGroup()
                .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(datosABuscar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 349, Short.MAX_VALUE)
                .addGap(59, 59, 59))
        );

        jPanel6.setBackground(new java.awt.Color(255, 255, 255));

        etiquetaMensajeria.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        etiquetaMensajeria.setText("Área de mensajería");

        javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
        jPanel6.setLayout(jPanel6Layout);
        jPanel6Layout.setHorizontalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel6Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(etiquetaMensajeria, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel6Layout.setVerticalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(etiquetaMensajeria, javax.swing.GroupLayout.DEFAULT_SIZE, 27, Short.MAX_VALUE)
        );

        jPanel7.setBackground(new java.awt.Color(255, 255, 255));

        botonAgregar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos35X35/Agregar.png"))); // NOI18N
        botonAgregar.setText("Agregar");
        botonAgregar.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        botonAgregar.setMargin(new java.awt.Insets(2, 4, 2, 6));
        botonAgregar.setMaximumSize(new java.awt.Dimension(97, 43));
        botonAgregar.setMinimumSize(new java.awt.Dimension(97, 43));
        botonAgregar.setPreferredSize(new java.awt.Dimension(106, 51));
        botonAgregar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAgregarActionPerformed(evt);
            }
        });

        botonModificar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos35X35/Edit.png"))); // NOI18N
        botonModificar.setText("Modificar");
        botonModificar.setMargin(new java.awt.Insets(2, 4, 2, 6));
        botonModificar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonModificarActionPerformed(evt);
            }
        });

        botonEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos35X35/delete_32x32x32.png"))); // NOI18N
        botonEliminar.setText("Eliminar");
        botonEliminar.setMargin(new java.awt.Insets(2, 4, 2, 6));
        botonEliminar.setMaximumSize(new java.awt.Dimension(106, 51));
        botonEliminar.setMinimumSize(new java.awt.Dimension(106, 51));
        botonEliminar.setPreferredSize(new java.awt.Dimension(106, 51));
        botonEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonEliminarActionPerformed(evt);
            }
        });

        botonVer.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos35X35/Previsualizar.png"))); // NOI18N
        botonVer.setText("Ver");
        botonVer.setMargin(new java.awt.Insets(2, 4, 2, 6));
        botonVer.setMaximumSize(new java.awt.Dimension(106, 51));
        botonVer.setMinimumSize(new java.awt.Dimension(106, 51));
        botonVer.setPreferredSize(new java.awt.Dimension(106, 51));
        botonVer.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonVerActionPerformed(evt);
            }
        });

        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos35X35/Convenio.png"))); // NOI18N
        jButton1.setText("Agregar convenio");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7);
        jPanel7.setLayout(jPanel7Layout);
        jPanel7Layout.setHorizontalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel7Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 171, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(botonAgregar, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(botonModificar, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(botonEliminar, javax.swing.GroupLayout.PREFERRED_SIZE, 122, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(botonVer, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        jPanel7Layout.setVerticalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel7Layout.createSequentialGroup()
                .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel7Layout.createSequentialGroup()
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(botonVer, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanel7Layout.createSequentialGroup()
                        .addGap(25, 25, 25)
                        .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jButton1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
                            .addComponent(botonAgregar, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(botonEliminar, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(botonModificar, javax.swing.GroupLayout.Alignment.TRAILING))))
                .addContainerGap())
        );

        jPanel7Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {botonAgregar, botonEliminar, botonModificar, botonVer});

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jPanel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
    }// </editor-fold>//GEN-END:initComponents

    /**
     * Método Action Performed del boton de Modificar, el cuál para ser utilizado
     * debe haber una fila con la información de un profesional externo seleccionada previamente.
     * Al realizarce el evento desplega el dialogoInfoProfesionalExterno mostrando los campos
     * a modificar.
     *
     * @param variable de tipo ActionEvent con el evento del boton
     **/
    private void botonModificarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonModificarActionPerformed
        service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if (p.isModificarProfesionalExterno()) {
            formulario.habilitarCampos(true);
            service.ProfesionalExterno profesional = new service.ProfesionalExterno();
            if (-1 != this.contenedorProfesionalesExternos.getSelectedRow()) //Devuelve -1 si no esta seleccionada
            {
                int fila = this.contenedorProfesionalesExternos.getSelectedRow();
                String rut = String.valueOf(this.contenedorProfesionalesExternos.getValueAt(fila, 0));
                //tengo lista y busco en los servicios el rut, muestro info
                this.formulario.setTitle("Modificar Profesional Externo");
                this.formulario.botonFormularioAccion.setText("Aceptar");
                this.formulario.botonFormularioAccion.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/Aceptar.png")));
                formulario.llenarCampos((service.ProfesionalExterno) cargarProfesionalExterno(rut));
                this.formulario.camposObligatoriosVisibles(true);
                this.formulario.setVisible(true);
                this.formulario.getMensajesAdvertencia().setText("Área de mensajería");
            } else {
                JOptionPane.showMessageDialog(this, "Debe seleccionar una fila!", "Advertencia", JOptionPane.WARNING_MESSAGE);
            }
        } else {
            JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
        }
    }//GEN-LAST:event_botonModificarActionPerformed

    /**
     * Método Action Performed del boton de Eliminar, el cuál para ser utilizado
     * debe haber una o más filas seleccionadas previamente.
     * Al realizarce el evento se cambia el estado de los Profesionales Externos, ya que pasa a la papelera.
     *
     * @param variable de tipo ActionEvent con el evento del boton
     **/
    private void botonEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonEliminarActionPerformed
        service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if (p.isEliminarProfesionalExterno()) {
            int cont = 0;
            for (int i = 0; i < contenedorProfesionalesExternos.getRowCount(); i++) {
                if (contenedorProfesionalesExternos.isRowSelected(i)) {
                    cont++;
                }
            }
            if (cont >= 1) {
                if (cont > 1) {
                    etiquetaEliminar.setText("¿Confirma que desea enviar a la papelera los profesionales seleccionados?");
                } else if (cont == 1) {
                    etiquetaEliminar.setText("¿Confirma que desea enviar a la papelera el profesional seleccionado?");
                }
                dialogoEliminarProfExterno.setLocationRelativeTo(null);
                dialogoEliminarProfExterno.setVisible(true);
            } else {
                this.cambiarEtiquetaMensajeria("Debe seleccionar un profesional para ser eliminado", Color.red);
            }
        } else {
            JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
        }
    }//GEN-LAST:event_botonEliminarActionPerformed

    /**
     * Método Action Performed del boton de Agregar.
     * Al realizarce el evento desplega el dialogoInfoProfesionalExterno mostrando los campos
     * a llenar para poder agregar el Profesional Externo.
     *
     * @param variable de tipo ActionEvent con el evento del boton
     **/
    private void botonAgregarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAgregarActionPerformed
        service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if (p.isAgregarProfesionalExterno()) {
            this.formulario.limpiarCampos();
            this.formulario.habilitarCampos(true);
            this.formulario.setTitle("Agregar Profesional Externo");
            this.formulario.botonFormularioAccion.setText("Agregar");
            this.formulario.botonFormularioAccion.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/Agregar.png")));
            this.formulario.camposObligatoriosVisibles(true);
            this.formulario.agregarFocusListenerRutProfesionalExterno();
            this.formulario.getMensajesAdvertencia().setText("Área de mensajería");
            this.formulario.setVisible(true);
           
        } else {
            JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
        }
    }//GEN-LAST:event_botonAgregarActionPerformed

    /**
     * Método Action Performed del boton de Ver, el cuál para ser utilizado
     * debe haber una fila con la información de un Profesional Externo seleccionada previamente.
     * Al realizarce el evento desplega el dialogoInfoProfesionalExterno mostrando los datos, con la
     * particuralidad de que no se puede modificar la información.
     *
     * @param variable de tipo ActionEvent con el evento del boton
     **/
    private void botonVerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonVerActionPerformed
        service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if (p.isVerProfesionalExterno()) {
            accionVer();
            this.formulario.getMensajesAdvertencia().setText("Área de mensajería");
        } else {
            JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
        }
    }//GEN-LAST:event_botonVerActionPerformed

    /**
     * Método MouseClicked de la tabla que contiene a los profesionales Externos.
     *
     * @param variable de tipo MouseEvent con el evento del mouse
     **/
    private void mouseClickedContenedorUsuarios(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_mouseClickedContenedorUsuarios
        // TODO add your handling code here:
        DefaultTableModel modelo = (DefaultTableModel) this.contenedorProfesionalesExternos.getModel();
        int fila = contenedorProfesionalesExternos.rowAtPoint(evt.getPoint());
        if ((fila > -1) && evt.getClickCount() == 2) {
            accionVer();
        }
    }//GEN-LAST:event_mouseClickedContenedorUsuarios

    /**
     * Método Key Released del campo destinado para buscar datos.     *
     *
     * @param variable de tipo KeyEvent con el evento del campo
     **/
    private void datosABuscarKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_datosABuscarKeyReleased
        service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if (p.isBuscarProfesionalExterno()) {
            if (!datosABuscar.getText().equals("")) {
                limpiarTabla();
                java.util.List<service.ProfesionalExterno> lista = (java.util.List<service.ProfesionalExterno>) this.filtrarProfesionalExternos(datosABuscar.getText());
                actualizarTabla(lista);
            } else {
                limpiarTabla();
                actualizarTabla((java.util.List<service.ProfesionalExterno>) listarProfesionalesExternos());
            }
        } else {
            JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
        }
    }//GEN-LAST:event_datosABuscarKeyReleased

    private void botonSiEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSiEliminarActionPerformed
        dialogoEliminarProfExterno.dispose();
        for (int i = 0; i < contenedorProfesionalesExternos.getRowCount(); i++) {
            if (contenedorProfesionalesExternos.isRowSelected(i)) {
                String rut = (String) contenedorProfesionalesExternos.getValueAt(i, 0);
                service.ProfesionalExterno prof = (service.ProfesionalExterno) cargarProfesionalExterno(rut);
                prof.setActivo(false);
                String valorNuevo = "Rut: " + prof.getRut() + "\n" + "Nombres: " + prof.getNombres() + "\n" + "Apellido paterno: " + prof.getApellidoPaterno() + "\n" + "Apellido materno: " + prof.getApellidoMaterno() + "\n" + "Bloque: " + prof.getBloque() + "\n" + "Calle: " + prof.getCalle() + "\n" + "Celular: " + prof.getCelular() + "\n"
                        + "Comuna: " + prof.getComuna() + "\n" + "departamento: " + prof.getDepto() + "\n" + "Email: " + prof.getEmail() + "\n" + "Especialidad:" + prof.getEspecialidad() + "\n" + "Fecha nacimiento:" + prof.getFechaNac() + "\n" + "Lugar de trabajo: " + prof.getLugarDeTrabajo() + "\n" + "Número:" + prof.getNumero() + "\n" + "porcentaje:"
                        + prof.getPorcentaje() + "\n" + "Provincia:" + prof.getProvincia() + "\n" + "Región:" + prof.getRegion() + "\n" + "Teléfono:" + prof.getTelefono();
                registrar(Login.getUser(), "profesional externo", "Eliminó profesional externo: " + prof.getRut(), "No aplica", valorNuevo);
                this.etiquetaMensajeria.setText(Mensajeria.mensajeDeAccion("Profesional Externo", "elminar"));
                modificarProfesionalExterno(prof);
            }
        }

        this.actualizarTabla(listarProfesionalesExternos());

    }//GEN-LAST:event_botonSiEliminarActionPerformed

    private void botonNoEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonNoEliminarActionPerformed
        dialogoEliminarProfExterno.dispose();
}//GEN-LAST:event_botonNoEliminarActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if(p.isAgregarConvenio()){
            // agregar convenio
            int[] filasSelec= contenedorProfesionalesExternos.getSelectedRows();
            if(filasSelec.length==1){
                service.ProfesionalExterno pro= new service.ProfesionalExterno();
                int fila = filasSelec[0];
                String rutProfesional = (String)this.contenedorProfesionalesExternos.getValueAt(fila, 0);
                service.ProfesionalExternoWSService service = new service.ProfesionalExternoWSService();
                service.ProfesionalExternoWS port = service.getProfesionalExternoWSPort();
                java.util.List<service.ProfesionalExterno> profesionales= port.listarProfesionalesExternos();
                //buscar el profesional externo, para luego crear el convenio
                for(int i = 0; i< profesionales.size(); i++ ){
                    if(profesionales.get(i).getRut().equals(rutProfesional)){
                            pro=profesionales.get(i);
                        }
                }
                Convenios pp= new Convenios();
                formularioConvenio con=new formularioConvenio(null,true,pp);
                con.limpiarFormulario();
                con.ocultarAsteriscosFormulario(false);
                con.llenarDatosFormularioProfesional(pro);
                con.setTitle("Agregar Convenio");
                con.setLocationRelativeTo(null);
                con.setVisible(true);
            }else{
                this.etiquetaMensajeria.setText("Seleccione una fila");
                this.etiquetaMensajeria.setForeground(Color.red);
            }
        }
        else{
            JOptionPane.showMessageDialog(this,"No tiene permisos para esta acción, contacte al administrador para más información");
        }
    }//GEN-LAST:event_jButton1ActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonAgregar;
    private javax.swing.JButton botonEliminar;
    private javax.swing.JButton botonModificar;
    private javax.swing.JButton botonNoEliminar;
    private javax.swing.JButton botonSiEliminar;
    private javax.swing.JButton botonVer;
    private javax.swing.JTable contenedorProfesionalesExternos;
    private javax.swing.JTextField datosABuscar;
    private javax.swing.JDialog dialogoEliminarProfExterno;
    private javax.swing.JLabel etiquetaEliminar;
    public javax.swing.JLabel etiquetaMensajeria;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel18;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JPanel jPanel6;
    private javax.swing.JPanel jPanel7;
    private javax.swing.JPanel jPanel8;
    private javax.swing.JScrollPane jScrollPane4;
    // End of variables declaration//GEN-END:variables

    public void normalizarEtiquetaMensajeria() {
        etiquetaMensajeria.setText("Área de mensajería");
        etiquetaMensajeria.setForeground(Color.black);
    }

    public void cambiarEtiquetaMensajeria(String mensaje, Color color) {
        etiquetaMensajeria.setText(mensaje);
        etiquetaMensajeria.setForeground(color);
    }

    /**
     * Método utilizado para realizar la acción del botón ver, la cuál también se puede
     * utilizar cuando se hace doble clic sobre una fila.
     */
    public void accionVer() {
        service.ProfesionalExterno ProfesionalExterno = new service.ProfesionalExterno();
        if (-1 != this.contenedorProfesionalesExternos.getSelectedRow()) //Devuelve -1 si no esta seleccionada
        {
            int fila = this.contenedorProfesionalesExternos.getSelectedRow();
            String rut = String.valueOf(this.contenedorProfesionalesExternos.getValueAt(fila, 0));
            //tengo lista y busco en los servicios el rut, muestro info
            this.formulario.setTitle("Ver Profesional Externo");
            this.formulario.botonFormularioAccion.setText("Exportar");
            this.formulario.botonFormularioAccion.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/pdf.png")));
            // id=buscarIdAPartirDeUnRut(rut);
            this.formulario.camposObligatoriosVisibles(false);
            formulario.llenarCampos((service.ProfesionalExterno) cargarProfesionalExterno(rut));
            formulario.habilitarCampos(false);
            this.formulario.setVisible(true);
        } else {
            JOptionPane.showMessageDialog(this, "Debe seleccionar una fila!", "Advertencia", JOptionPane.WARNING_MESSAGE);
        }
    }

    /**
     * Método utilizado para actualizar los datos de la tabla que muestra todos los profesionales externos,
     * de acuerdo a la información que se encuentra en la base de datos.
     *
     * @param profesionalExterno de tipo service.ProfesionalExterno que contiene al profesional.
     */
    public void actualizarTabla(java.util.List<service.ProfesionalExterno> profesionalExterno) {
        limpiarTabla();
        java.util.List<service.ProfesionalExterno> profesionales = profesionalExterno;

        for (int i = 0; i < profesionales.size(); i++) {
            if (profesionales.get(i).isActivo() == true) {
                int fila = this.contenedorProfesionalesExternos.getRowCount();
                DefaultTableModel modelo = (DefaultTableModel) this.contenedorProfesionalesExternos.getModel();
                modelo.addRow(new String[4]);
                for (int col = 0; col < this.contenedorProfesionalesExternos.getColumnCount(); col++) {
                    this.contenedorProfesionalesExternos.setValueAt(profesionales.get(i).getRut(), fila, 0);
                    this.contenedorProfesionalesExternos.setValueAt(profesionales.get(i).getNombres(), fila, 1);
                    this.contenedorProfesionalesExternos.setValueAt(profesionales.get(i).getApellidoPaterno(), fila, 2);
                    this.contenedorProfesionalesExternos.setValueAt(profesionales.get(i).getEspecialidad(), fila, 3);
                    this.contenedorProfesionalesExternos.setValueAt(profesionales.get(i).getLugarDeTrabajo(), fila, 4);
                }
            }

        }
    }

    /**
     * Método utilizado para limpiar la tabla que contiene la información
     * de los profesionales externs que están en la base de datos.
     */
    public void limpiarTabla() {
        for (int i = this.contenedorProfesionalesExternos.getRowCount(); i > 0; i--) {
            DefaultTableModel temp = (DefaultTableModel) this.contenedorProfesionalesExternos.getModel();
            temp.removeRow(temp.getRowCount() - 1);
        }
    }

    public JTable getContenedorProfesionalesExternos() {
        return contenedorProfesionalesExternos;
    }

    public JLabel getjLabel5() {
        return etiquetaMensajeria;
    }

    /*Aqui comienzan los métodos correspondientes a los servicios*/
    /**
     * Método registra en la bitácora la acción realizada en el sistema
     **/
    private static Long registrar(service.Usuario usuario, java.lang.String modulo, java.lang.String accion, java.lang.String valorAnterior, java.lang.String valorNuevo) {
        service.BitacoraWSService service = new service.BitacoraWSService();
        service.BitacoraWS port = service.getBitacoraWSPort();
        return port.registrar(usuario, modulo, accion, valorAnterior, valorNuevo);
    }

    /**
     * Método que modifica el profesional externo que esta registrado en la Base de Datos,
     * a través del servicio modificarProfesionalExterno.
     * @param variable de tipo service.ProfesionalExterno llamada arg0 que es el profesional externo a modificar.
     * @return variable de tipo boolean que indica si se realizó (true)
     * o no (false) la actualización del profesional externo.
     **/
    private static boolean modificarProfesionalExterno(service.ProfesionalExterno profesional) {
        service.ProfesionalExternoWSService service = new service.ProfesionalExternoWSService();
        service.ProfesionalExternoWS port = service.getProfesionalExternoWSPort();
        return port.modificarProfesionalExterno(profesional);
    }

    /**
     * Método que retorna la lista de Profeisonales Externos que se ha filtrado de acuerdo
     * a un parámetro a buscar.
     * @param String buscar
     * @return variable de tipo java.util.List<service.ProfesionalExterno> que contiene la
     * lista de usuarios.
     **/
    private static java.util.List<service.ProfesionalExterno> filtrarProfesionalExternos(java.lang.String buscar) {
        service.ProfesionalExternoWSService service = new service.ProfesionalExternoWSService();
        service.ProfesionalExternoWS port = service.getProfesionalExternoWSPort();
        return port.filtrarProfesionalExternos(buscar);
    }

    /**
     * Método que retorna la lista de Profesionales Externos que estan en la Base de Datos,
     * a través del servicio listarProfesionalesExternos.
     * @return variable de tipo java.util.List<service.ProfesionalExterno> que contiene la
     * lista de profesionales externos.
     **/
    private static java.util.List<service.ProfesionalExterno> listarProfesionalesExternos() {
        service.ProfesionalExternoWSService service = new service.ProfesionalExternoWSService();
        service.ProfesionalExternoWS port = service.getProfesionalExternoWSPort();
        return port.listarProfesionalesExternos();
    }

    /**
     * Método que carga el profesional externo de la Base de Datos, a partir de un rut y
     * a través del servicio cargarProfesionalExterno.
     * @param variable de tipo String correspondiente al rut profesional externo a cargar.
     * @return variable de tipo Object que corresponde al ProfesionalExterno cargado.
     **/
    private static Object cargarProfesionalExterno(java.lang.String rut) {
        service.ProfesionalExternoWSService service = new service.ProfesionalExternoWSService();
        service.ProfesionalExternoWS port = service.getProfesionalExternoWSPort();
        return port.cargarProfesionalExterno(rut);
    }

    private static Object cargarPrivilegios(java.lang.String rut) {
        service.PrivilegiosWS_Service service = new service.PrivilegiosWS_Service();
        service.PrivilegiosWS port = service.getPrivilegiosWSPort();
        return port.cargarPrivilegios(rut);
    }
}
